{{tag>console programmation terminal }}
----

====== PHPBrew ======

[[https://phpbrew.github.io/phpbrew/|PHPBrew]] est un utilitaire qui permet d'installer de multiples versions de PHP (5), 7 et 8 et de ses extensions, et de basculer facilement de l'une à l'autre.
Il est essentiellement utile sur une machine de développement. Pour un serveur, on privilégiera l'utilisation de [[:docker]].

<note warning>Selon la version d’Ubuntu, des problèmes pour installer certaines versions de PHP peuvent se poser, liés à des contraintes de dépendances. Par exemple sous [[:Jammy]], l’installation de PHP 7.4 requière la bibliothèque //oniguruma//, problème qu’on peut éviter en évitant l’installation du module mbstring : ajouter l’option //-mbstring//, … mais on passe alors à une erreur liée à OpenSSL… qui nécessite de compiler la version OpenSSL plus ancienne qui va avec ((https://github.com/phpbrew/phpbrew/issues/1263)) </note>

===== Installation =====
Il faut installer certains paquets dont aura besoin PHPBrew. Selon sa version d'Ubuntu, cela peut changer un peu, reportez-vous à la page [[https://github.com/phpbrew/phpbrew/wiki/Requirement#ubuntu-requirements|Ubuntu Requirements]] du projet.

Pour [[:jammy]], cela donne :
<code bash>
sudo apt install build-essential libbz2-dev libreadline-dev libsqlite3-dev libcurl4-gnutls-dev libzip-dev libssl-dev libxml2-dev libxslt-dev php8.1-cli php8.1-bz2 pkg-config
</code>

Pour [[:focal]], cela donne :
<code bash>
sudo apt install build-essential libbz2-dev libreadline-dev libsqlite3-dev libcurl4-gnutls-dev libzip-dev libssl-dev libxml2-dev libxslt-dev php7.4-cli php7.4-bz2 pkg-config
</code>

On télécharge et installe ensuite phpbrew :
<code bash>
# téléchargement
curl -L -O https://github.com/phpbrew/phpbrew/releases/latest/download/phpbrew.phar
# ajout des droits d'exécution
chmod +x phpbrew.phar
# déplacement dans le bon répertoire et renommage
sudo mv phpbrew.phar /usr/local/bin/phpbrew
# on peut vérifier que le répertoie /usr/local/bin est bien défini dans la variable d'environnement $PATH
echo $PATH | grep "usr/local/bin"
# usr/local/bin doit ressortir surligné
</code>

on intialise phpbrew :
<code bash>
phpbrew init
</code>

puis on ajoute à son fichier //~/.bashrc// la ligne :
<code bash>
[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc
</code>

on recharge notre fichier //.bashrc// :
<code bash>
source ~/.bashrc
# puis on définit le préfixe par défaut pour la recherche des bibliothèque
phpbrew lookup-prefix ubuntu
</code>

===== Utilisation =====
Quelques commandes
<code bash>
# pour lister les versions disponible de base
phpbrew known
# pour ajouter les versions 5 :
phpbrew update --old

# ajouter une version PHP sur sa machine :
# la version 8.1.6 avec les modules par défaut, le module mysql et on évite le module mbstring qui nécessite la bibliothèque oniguruma
phpbrew install 8.1.6 +default +mysql -mbstring

# pour basculer sur cette version 8.1.6 temporairement donc revient à la version par défaut au prochain démarrage de terminal
phpbrew use 8.1.6
# ou basculer de façon permanente
phpbrew switch 8.1.6
</code>

==== Installer PHP 7.4 sous Jammy (PHP8 par défaut) ==== 
Sous [[:jammy]], il faut installer la librairie Oniguruma (//libonig-dev//) et compiler la version d'OpenSSL compatible, cela donne les lignes suivantes ((https://github.com/phpbrew/phpbrew/issues/1263)) :
<code bash>
sudo apt install libonig-dev

cd $HOME
wget https://www.openssl.org/source/openssl-1.1.1i.tar.gz
tar xzf $HOME/openssl-1.1.1i.tar.gz
cd openssl-1.1.1i
./Configure --prefix=$HOME/openssl-1.1.1i/bin -fPIC -shared linux-x86_64
make -j 8 
make install

export PKG_CONFIG_PATH=$HOME/openssl-1.1.1i/bin/lib/pkgconfig && phpbrew --debug install 7.4 +default
</code>
Et si tout s'est bien passé, on peut vérifier avec 
<code bash>
phpbrew use php-7.4.30
php -v
# qui doit retourner quelques lignes telle que :
PHP 7.4.30 (cli) (built: Jun 30 2022 18:11:43) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
</code>
===== Voir aussi =====
  * <sup>(EN)</sup>[[https://phpbrew.github.io/phpbrew/]] page officiel du dépôt phpbrew 
  * <sup>(fr)</sup> [[https://grafikart.fr/tutoriels/phpbrew-multiple-php-versions-1097|tutoriel de grafikart]] (sur lequel est basé cette page)

----

//Contributeurs : [[:utilisateurs/bcag2]]//